#include <bits/stdc++.h>
using namespace std;
const int N=1e5+50;
int tree[33*N][2];
int a[33*N];
int pre[N];
int cnt;
int x,n;
void init(){
    memset(tree,0,sizeof(tree));
    memset(a,0,sizeof(a));
    cnt=0;
}
void insert(int x,int p){
    int root=0;
    for(int i=31;i>=0;i--){
        int id=(x>>i)&1;
        if(!tree[root][id]){
            tree[root][id]=++cnt;
        }
        root=tree[root][id];
    }
    a[root]=p;
}
int query(int x){
    int root=0;
    for(int i=31;i>=0;i--){
        int id=(x>>i)&1;
        if(tree[root][id^1]){
            root=tree[root][id^1];
        }
        else{
            root=tree[root][id];
        }
    }
    return a[root];
}
int main(void){
    printf("%d %d\n",2147483647>>32,2147483647>>31);
    scanf("%d",&n);
    init();
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        pre[i]=pre[i-1]^x;
    }
    insert(pre[0],0);
    int Max=0;
    for(int i=1;i<=n;i++){
        int k=query(pre[i]);
        //printf("%d %d\n",ans,pre[i]);
        Max=max(Max,pre[i]^pre[k]);
        insert(pre[i],i);
    }
    printf("%d\n",Max);
    return 0;
}